package modelo.persistencia.JDBC;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import modelo.entidades.ListaInteres;
import modelo.entidades.ListaInteresImp;
import modelo.persistencia.ListaInteresDAO;


public class ListaInteresDAOJDBC implements ListaInteresDAO {

    @Override
    public ListaInteres read(String pk) throws SQLException, Exception {
        ListaInteres listaInteres = null;
        String sql = "select * from lista_interes where matricula = ?";
        try {
            PreparedStatement stmt = Persistencia.createConnection().prepareStatement(sql);
            stmt.setString(1, pk);
            ResultSet res = stmt.executeQuery();
            if (res.next()) {
                String matricula = res.getString("matricula");
                Timestamp fecha = res.getTimestamp("fecha");
                String motivo = res.getString("motivo");
                listaInteres = new ListaInteresImp(matricula);
                listaInteres.setFecha(fecha);
                listaInteres.setMotivo(motivo);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return listaInteres;
    }


    @Override
    public ListaInteres read(ListaInteres entidad) throws SQLException, Exception {
        throw new UnsupportedOperationException("No implementado");
    }
    
    @Override
    public void create(ListaInteres listaInteres) throws SQLException, Exception {
        String sql = "insert into lista_interes(matricula, fecha, motivo) values (?,?,?)";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, listaInteres.getMatricula());
            stm.setTimestamp(2, (Timestamp) listaInteres.getFecha());
            stm.setString(3, listaInteres.getMotivo());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void update(ListaInteres listaInteres) throws SQLException, Exception {
        String sql = "update lista_interes set matricula=?, fecha=?, motivo=? where matricula=?";
        try {
            java.sql.Date dia= new java.sql.Date(listaInteres.getFecha().getTime());
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, listaInteres.getMatricula());
            stm.setTimestamp(2, listaInteres.getFecha());
            stm.setString(3, listaInteres.getMotivo());
            stm.setString(4, listaInteres.getMatricula());
            stm.executeUpdate();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public void delete(ListaInteres listaInteres) throws SQLException, Exception {
            String sql = "DELETE FROM lista_interes WHERE matricula=?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1,listaInteres.getMatricula());
            stm.execute();
        } finally {
            Persistencia.closeConnection();
        }
    }

    @Override
    public List<ListaInteres> list() throws SQLException, Exception {
        List<ListaInteres> listaIntereses = new ArrayList<ListaInteres>();
        try {
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("select * from lista_interes");
            while (res.next()) {
                String matricula = res.getString("matricula");
                Timestamp fecha = res.getTimestamp("fecha");
                String motivo = res.getString("motivo");
                ListaInteres listaInteres = new ListaInteresImp(matricula);
                listaInteres.setFecha(fecha);
                listaInteres.setMotivo(motivo);
                listaIntereses.add(listaInteres);
            }
        } finally {
            Persistencia.closeConnection();
        }
        return listaIntereses;
    }
}
